#!/usr/bin/env node

// Node CLI 应用中入口文件必须要有这样的文件头，并且在类Unix系统中，还需要设置cli文件的读写权限为755

// 脚手架的工作过程：
// 1. 通过命令行交互询问用户问题
// 2. 根据用户回答的结果生成文件

const fs = require('fs')
const path = require('path')
const inquirer = require('inquirer')
const ejs = require('ejs')

inquirer.prompt([
  {
    type: 'input',
    name: 'title',
    message: 'Project name?'
  },
  {
    type: 'input',
    name: 'name',
    message: 'your name?'
  },
  {
    type: 'number',
    name: 'age',
    message: 'your age?'
  },
  {
    type: 'list',
    name: 'phone',
    message: '选择手机品牌',
    choices: [
      { name: '小米', value: 'mi' },
      { name: '华为', value: 'huawei' },
      { name: '苹果', value: 'apple' }
    ]
  },
  {
    type: 'checkbox',
    name: 'lang',
    message: '语言',
    choices: [
      { name: 'javascript', value: 'javascript' },
      { name: 'php', value: 'php' },
      { name: 'go', value: 'go' },
    ],
  }
])
  .then(anwsers => {
    // console.log(anwsers)
    // 根据用户回答的结果生成文件

    // 模板目录
    const tmplDir = path.join(__dirname, 'templates')
    // 目标目录
    const destDir = process.cwd()

    // 将模板下的文件全部转换到目标目录
    fs.readdir(tmplDir, (err, files) => {
      if (err) throw err
      files.forEach(file => {
        // 通过模板引擎渲染文件
        ejs.renderFile(path.join(tmplDir, file), anwsers, (err, result) => {
          if (err) throw err
          // 将结果写入目标文件路径
          fs.writeFileSync(path.join(destDir, file), result)
        })
      })
    })
  })